package me.zhengjie.modules.insurance.mapper;

import me.zhengjie.modules.insurance.domain.InsuredUser;
import me.zhengjie.modules.insurance.pojo.MatchingSiteRequest;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 保险用户映射器
 *
 * @author hehui
 * @date 2021/12/26
 */
@Mapper
public interface InsuredUserMapper {
    /**
     * 按主键删除
     *
     * @param id id
     * @return int
     */
    int deleteByPrimaryKey(Long id);

    /**
     * 插入
     *
     * @param record 记录
     * @return int
     */
    int insert(InsuredUser record);

    /**
     * 插入选择性
     *
     * @param record 记录
     * @return int
     */
    int insertSelective(InsuredUser record);

    /**
     * 选择通过主键
     *
     * @param id id
     * @return {@link InsuredUser}
     */
    InsuredUser selectByPrimaryKey(Long id);

    /**
     * 更新主键的选择性
     *
     * @param record 记录
     * @return int
     */
    int updateByPrimaryKeySelective(InsuredUser record);

    /**
     * 更新的主键
     *
     * @param record 记录
     * @return int
     */
    int updateByPrimaryKey(InsuredUser record);

    /**
     * 存在生效中的保单
     *
     * @param userIdCard 用户id卡
     * @param notId
     * @return {@link Integer}
     */
    Integer existsEffectPolicy(@Param("userIdCard") String userIdCard, @Param("notId") Long notId);

    /**
     * 存在生效中的
     *
     * @param userIdCards 用户id卡片
     * @return {@link Integer}
     */
    Integer existsIsEffectPolicy(@Param("userIdCards") List<String> userIdCards);

    /**
     * 批量移除
     *
     * @param ids           id
     * @param currentUserId 当前用户id
     * @return int
     */
    int batchOut(@Param("ids") List<Long> ids, @Param("currentUserId") long currentUserId);

    /**
     * 在ids中删除
     *
     * @param ids           id
     * @param currentUserId 当前用户id
     */
    void deletedInIds(@Param("ids") Long[] ids, @Param("currentUserId") long currentUserId);

    /**
     * 批量插入
     *
     * @param userList 用户列表
     * @return int
     */
    int batchInsert(List<InsuredUser> userList);

    /**
     * 匹配所属公司
     *
     * @param request 请求
     * @return {@link Long}
     */
    Long matchingCompany(MatchingSiteRequest request);

    /**
     * 匹配
     *
     * @param request 请求
     * @return {@link InsuredUser}
     */
    InsuredUser matching(MatchingSiteRequest request);

    /**
     * 批量减员导出
     *
     * @param delUserIdCards 德尔用户身份证
     * @param userId         用户id
     * @return int
     */
    int batchOutInUserIdCard(@Param("delUserIdCards") List<String> delUserIdCards, @Param("userId") long userId);

    /**
     * 找到用户名
     *
     * @param userIdCards 用户id卡片
     * @return {@link List}<{@link InsuredUser}>
     */
    List<InsuredUser> findUserName(@Param("userIdCards") List<String> userIdCards);
}